package cn.edu.scnu.cs2020.huangrun;

public class number
{
    private int numerator;
    private int denominator;

    public number()                             //缺省构造器，将有理数设置为0/1
    {
        numerator=0;
        denominator=1;
    }

    public number(int numerator,int denominator)     //参数用于分子和分母的构造器，该构造器会将所产生的比率转换为化简形式
    {
        simplify(numerator,denominator);
    }

    private void simplify(int numerator,int denominator)                                      //私有方法，将有理数转换为简化形式
    {
        int gcd=getGCD(numerator,denominator);
        this.numerator=numerator/gcd;
        this.denominator = denominator / gcd;
    }

    private static int getGCD(int x,int y)           //私有静态方法，返回两个正整数x和y的最大公约数，即，他们的最大公分母。例如，40和12的最大公分母为4
    {
        if(y>x)
        {
            int temp=y;
            y = x;
            x=temp;
        }
        int remainder=x%y;
        while(remainder!=0)
        {
            x=y;
            y=remainder;
            remainder=x%y;
        }
        return y ;
    }

    public double getValue()                    //将该有理数作为double值返回
    {
        return ((double) numerator / (double)denominator);
    }

    public String toString()                    //将该有理数作为a/b形式的字符串返回
    {
        return (numerator+"/"+denominator);
    }
}
